package com.chenjiajin.controller;

import ch.qos.logback.classic.Level;
import ch.qos.logback.classic.LoggerContext;
import lombok.extern.slf4j.Slf4j;
import org.slf4j.LoggerFactory;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

import java.time.LocalDate;

/**
 * 动态修改日志等级
 */
@Slf4j
@RestController
@RequestMapping("/demo")
public class LogLevelController {


    @GetMapping("update/{logLevel}")
    public void updateLogLevel(@PathVariable String logLevel) {   // 修改日志级别   http://127.0.0.1/demo/update/debug

        // 方式一:
        // 获取LoggerContext实例
        LoggerContext loggerContext = (LoggerContext) LoggerFactory.getILoggerFactory();

        // 获取RootLogger并设置日志级别
        //loggerContext.getLogger("ROOT").setLevel(Level.DEBUG);

        // 获取指定包下的Logger并设置日志级别
        //   日志级别：
        //      TRACE:最详细的日志
        //      DEBUG:调试级别
        //      INFO: 提示级别
        //      WARN: 警告级别
        //      ERROR：错误级别  --》级别最高,看到的日志最少
        loggerContext.getLogger("com.chenjiajin.controller").setLevel(Level.valueOf(logLevel));
        // 这里的包名应该是 com.chenjiajin.controller.LogLevelController:当前类的全限定名
        // 设置后 也只有当前类的日志等级受到影响改变

        // 可以设置包名如 com.chenjiajin.controller ,可以指该包下所有类的日志等级


        // 方式二:
        //LoggingSystem system = LoggingSystem.get(LoggingSystem.class.getClassLoader());
        //system.setLogLevel("com.chenjiajin.controller", LogLevel.valueOf(logLevel));
    }


    @GetMapping("test")
    public void test() {    // 测试 http://127.0.0.1/demo/test
        log.trace("time: {}", LocalDate.now());
        log.debug("time: {}", LocalDate.now());
        log.info("time: {}", LocalDate.now());
        log.warn("time: {}", LocalDate.now());
        log.error("time: {}", LocalDate.now());
    }

}